/**
 * 函数组合
 */

// 组合将洋葱代码封装起来
const compose = (f: (...args: any) => any, g: (...args: any) => any) => {
  return value => f(g(value))
}

// 翻转数组
const reverse = <T>(arr: T[]) => arr.reverse()

// 获取数组第一个元素
const first = <T>(arr: T[]) => arr[0]

// 获取数组最后一个元素，先翻转再取第一个元素
// 传入的数据先由reverse处理，处理后的数据再交给first处理，数据处理管道被连接了起来
const last = compose(first, reverse)
console.log(last([1, 2, 3]))

export {}
